
var express = require('express');
//创建路由对象
var router = express.Router();
//引用用户列表数据模型
var User = require('../models/User');
//引入分类列表数据模型
var Catogory = require('../models/Category');
//引入博文内容数据模型
var Content = require('../models/Content');


//判断是否为管理员
router.use(function (req,res,next) {
    
    if (!req.userInfo.isAdmin){
        res.send('对不起您不是管理员不能进入管理后台');
        return;
    }
    next()
});

//后台首页
router.get('/',function (req,res,next) {

    //res.send('您好管理员，欢迎您的到来')
    res.render('admin/index',{
        userInfo:req.userInfo
    });
});

//用户管理页面
router.get('/user',function (req,res,next) {
    /*
    * 从数据库中读取所有的用户信息，并返回给前端(分页显示)
    * limit(number):限制获取的数据条数
    * skip(2):忽略数据的条数（前2条，从第3条开始取）
    *  每页显示2条
    *  1： skip（0） 1.2
    *  2： skip（2） 3.4
    *  3： skip (4)  5.6
    *  忽略公式： （当前页 - 1）* 限制获取的数据条数
    * */
    //接受用户传过来的参数
    var page =Number( req.query.page || 1)
    var limit = 3;
    //var skip = (page - 1)*limit;
    var pages = 0;

    //读取用户总条数
    User.count().then(function (count) {
            //console.log(count);
        //总页数
        pages = Math.ceil(count/limit);
            //console.log(pages);
        //取值不能超过pages
        page = Math.min(page,pages);
        //取值不能小于1
        page = Math.max(page, 1);
            //console.log(page)
        //要忽略的条数
        var skip = (page - 1)*limit;
        //分页返回给客户端
        User.find().limit(limit).skip(skip).then(function (users) {
            //console.log(users);
            res.render('admin/user_index',{
                userInfo:req.userInfo,
                users:users,
                page:page,
                count:count,
                pages:pages,
                limit:limit
            })
        })

    });

});

//博客分类管理首页

router.get('/category',function (req,res) {
    /*
    * 从数据库中读取所有的博客分类信息，并返回给前端(分页显示)
    * limit(number):限制获取的数据条数
    * skip(2):忽略数据的条数（前2条，从第3条开始取）
    *  每页显示2条
    *  1： skip（0） 1.2
    *  2： skip（2） 3.4
    *  3： skip (4)  5.6
    *  忽略公式： （当前页 - 1）* 限制获取的数据条数
    * */
    //接受用户传过来的参数
    var page =Number( req.query.page || 1)
    var limit = 3;
    //var skip = (page - 1)*limit;
    var pages = 0;

    //读取博客总条数
   Catogory.count().then(function (count) {
        //console.log(count);
        //总页数
        pages = Math.ceil(count/limit);
        //console.log(pages);
        //取值不能超过pages
        page = Math.min(page,pages);
        //取值不能小于1
        page = Math.max(page, 1);
        //console.log(page)
        //要忽略的条数
        var skip = (page - 1)*limit;
        //分页返回给客户端
        /*
        * sort();所有数据进行排序
        * 1：升序
        * -1：降序
        * */
        Catogory.find().sort({_id:-1}).limit(limit).skip(skip).then(function (categories) {
            //console.log(users);
            res.render('admin/category_index.html',{
                userInfo:req.userInfo,
                categories:categories,
                page:page,
                count:count,
                pages:pages,
                limit:limit
            })
        })

    });

});
//分类添加
router.get('/category/add',function (req,res) {
    res.render('admin/category_add.html',{
        userInfo:req.userInfo
    })
});

//分类保存
router.post('/category/add',function (req,res) {
    //用户提交过的数据 {name：‘’}
    //console.log(req.body)
    var name = req.body.name || '';
    if (name ==''){
        res.render('admin/404.html',{
            userInfo:req.userInfo,
            messge:'名称不能为空'
            //url:'/admin/category'
        });
        return;
    };
    //数据库中是否已经存在同名的分类名称
    Catogory.findOne({
        name : name
    }).then(function (rs) {
        if (rs){
            res.render('admin/404.html',{
                userInfo:req.userInfo,
                messge:'分类已存在'
            });
            //不走下面的then方法
            return Promise.reject();
        }else{
            //数据库中不存在，可以保存
            return new Catogory({
                name:name
            }).save();
        }
    }).then(function (newCategory) {
        //console.log(newCategory)
        res.render('admin/success.html',{
            userInfo:req.userInfo,
            newCategory:newCategory,
            messge:'分类保存成功',
            url:'/admin/category'
        })
    })
    
});

//分类修改
router.get('/category/edit',function (req,res) {
    //console.log(req.query.id)
    //读取要修改的分类信息，并且用表单的形式展现出来
    var id = req.query.id || '';
    Catogory.findOne({
        _id:id
    }).then(function (category) {
        //console.log(category)
        if (!category){
            res.render('admin/404.html',{
                userInfo:req.userInfo,
                messge:'分类信息不存在'
            });
            return Promise.reject();
        }else{
            res.render('admin/category_edit.html',{
                userInfo:req.userInfo,
                category:category
            })
        }
    })

});

//分类修改保存
router.post('/category/edit',function (req,res) {
    //读取要修改的分类信息
    var id = req.query.id || '';
    //获取post提交过来的名称 console.log(req.body){ name: 'bbb' }
    var name = req.body.name || '';
    Catogory.findOne({
        _id:id
    }).then(function (category) {
        //console.log(category)
        if (!category){
            res.render('admin/404.html',{
                userInfo:req.userInfo,
                messge:'分类信息不存在'
            });
            return Promise.reject();
        }else{
            //用户没有做任何的修改
            if(name == category.name){
                res.render('admin/success.html',{
                    userInfo:req.userInfo,
                    messge:'修改成功',
                    url:'/admin/category'
                });
                return Promise.reject();
            }else{
                //要修改的分类名称是否已经在数据库中存在
                return Catogory.findOne({
                        _id:{$ne:id},
                        name:name
                })
            }
        }
    }).then(function (sameCategory) {
        if (sameCategory){
            res.render('admin/404.html',{
                userInfo:req.userInfo,
                messge:'数据库中已经有同名的分类存在了'
            })
            return Promise.reset();
        }else{
            //更新数据
            return  Catogory.update({
                _id:id
            },{
               name:name
            });
        }
    }).then(function (newcategory) {
        res.render('admin/success.html',{
            userInfo:req.userInfo,
            messge:'分类修改成功',
            url:'/admin/category'
        })
    })

});

//分类删去
router.get('/category/delete',function (req,res) {
   var id = req.query.id || '';
   //删去数据
    Catogory.remove({
        _id:id
    }).then(function (removecategory) {
        //console.log(removecategory)
        res.render('admin/success',{
            userInfo:req.userInfo,
            messge:'分类删去成功',
            url:'/admin/category'
        })
    })

});

//博客内容首页

router.get('/content',function (req,res) {
    /*
   * 从数据库中读取所有的博客内容信息，并返回给前端(分页显示)
   * limit(number):限制获取的数据条数
   * skip(2):忽略数据的条数（前2条，从第3条开始取）
   *  每页显示2条
   *  1： skip（0） 1.2
   *  2： skip（2） 3.4
   *  3： skip (4)  5.6
   *  忽略公式： （当前页 - 1）* 限制获取的数据条数
   * */
    //接受用户传过来的参数
    var page =Number( req.query.page || 1)
    var limit = 15;
    //var skip = (page - 1)*limit;
    var pages = 0;

    //读取博客总条数
    Content.count().then(function (count) {
        //console.log(count);
        //总页数
        pages = Math.ceil(count/limit);
        //console.log(pages);
        //取值不能超过pages
        page = Math.min(page,pages);
        //取值不能小于1
        page = Math.max(page, 1);
        //console.log(page)
        //要忽略的条数
        var skip = (page - 1)*limit;
        //分页返回给客户端
        /*
        * sort();所有数据进行排序
        * 1：升序
        * -1：降序
        * */
        //populate('category')从category关联的数据模型中去读取值
        Content.find().sort({addTime:-1}).limit(limit).skip(skip).populate(['category','user']).then(function (contents) {
            //console.log( contents);
            res.render('admin/content_index.html',{
                userInfo:req.userInfo,
                contents:contents,
                page:page,
                count:count,
                pages:pages,
                limit:limit
            })
        });

    });

});
//博客内容添加
router.get('/content/add',function (req,res) {
    //读取分类，返回前端
    Catogory.find().sort({_id:-1}).then(function (rs) {
        //console.log(rs)
        res.render('admin/content_add.html',{
            userInfo:req.userInfo,
            categories:rs
        });
    });

});

//博客内容保存
router.post('/content/add',function (req,res) {
    console.log(req.body)
    if (req.body.category ==''){
        res.render('admin/404.html',{
            userInfo:req.userInfo,
            messge:'内容分类不能为空'
        });
        return;
    }
    if (req.body.title ==''){
        res.render('admin/404.html',{
            userInfo:req.userInfo,
            messge:'内容标题不能为空'
        });
        return;
    }
    if (req.body.description ==''){
        res.render('admin/404.html',{
            userInfo:req.userInfo,
            messge:'内容简介不能为空'
        });
        return;
    }
    if (req.body.content ==''){
        res.render('admin/404.html',{
            userInfo:req.userInfo,
            messge:'内容不能为空'
        });
        return;
    }
    //保存数据到数据库
    new Content({
        category:req.body.category,
        title:req.body.title,
        user:req.userInfo._id.toString(),
        description:req.body.description,
        content:req.body.content
    }).save().then(function (rs) {
        //console.log(rs)
        res.render('admin/success.html',{
            userInfo:req.userInfo,
            messge:'博文内容保存成功',
            url:'/admin/content'
        })
    });

});

//修改博客
router.get('/content/edit',function (req,res) {
    //读取内容返回个前端一个表单页面
    var id = req.query.id || '';
    var categories = [];
    //读取分类
    Catogory.find().sort({_id:1}).then(function (rs) {
        categories = rs;
        //console.log(categary)
        return Content.findOne({
            _id:id
        }).populate('category')//读取所属分类信息
    }).then(function (content) {
        if (!content){
            res.render('admin/404.html',{
                userInfo:req.userInfo,
                messge:'内容不存在'
            });
            return Promise.reject();
        }else{
            //console.log(categories)
            res.render('admin/content_edit.html',{
                userInfo:req.userInfo,
                content:content,
                categories:categories
            })
        }
    })

});

//保存修改内容
router.post('/content/edit',function (req,res) {
    var id = req.query.id || '';
    //console(req.body );
    if (req.body.category ==''){
        res.render('admin/404.html',{
            userInfo:req.userInfo,
            messge:'内容分类不能为空'
        })
        return;
    }
    if (req.body.title ==''){
        res.render('admin/404.html',{
            userInfo:req.userInfo,
            messge:'内容标题不能为空'
        })
        return;
    }
    if (req.body.description ==''){
        res.render('admin/404.html',{
            userInfo:req.userInfo,
            messge:'内容简介不能为空'
        })
        return;
    }
    if (req.body.content ==''){
        res.render('admin/404.html',{
            userInfo:req.userInfo,
            messge:'内容不能为空'
        })
        return;
    }
    //更新数据
    Content.update({
        _id:id
    },{
        category:req.body.category,
        title:req.body.title,
        description:req.body.description,
        content:req.body.content
    }).then(function () {
        res.render('admin/success.html',{
            userInfo:req.userInfo,
            messge:'博客内容更新成功',
            url:'/admin/content'
        })
    })
});
//内容删去
router.get('/content/delete',function (req,res) {
    var id = req.query.id || '';
    Content.remove({
        _id:id
    }).then(function () {
        res.render('admin/success.html',{
            userInfo:req.userInfo,
            messge:'内容删去成功',
            url:'/admin/content'
        })
    })
});
//返回
module.exports = router;